import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage

# 从 env.example 文件加载环境变量 (OPENAI_API_KEY, OPENAI_BASE_URL)
# 我们通过 dotenv_path 参数指定了要加载的文件名
print("正在从 env.example 加载环境变量...")
load_dotenv(dotenv_path="env.example")

# 检查 OPENAI_API_KEY 是否已设置
if os.getenv("OPENAI_API_KEY") is None or os.getenv("OPENAI_API_KEY") == "":
    print("错误：请先在 env.example 文件中设置你的 OPENAI_API_KEY。")
else:
    print("环境变量加载成功！")
    # --- 核心代码开始 ---

    # 1. 初始化聊天模型
    # 我们从环境变量中读取要使用的模型名称
    model_name = os.getenv("OPENAI_MODEL")
    if not model_name:
        print("警告: 在 env.example 中未找到 OPENAI_MODEL，将使用默认模型 'qwen-plus-latest'。")
        model_name = "qwen-plus-latest" # 提供一个适合 DashScope 的默认值

    # 当 OPENAI_BASE_URL 在环境变量中时，LangChain 会自动使用它。
    chat = ChatOpenAI(model=model_name)
    print(f"聊天模型已初始化 (使用 {model_name} 和自定义 BASE_URL)。")

    # 2. 准备消息列表
    # 我们创建一个列表，包含系统消息和用户消息。
    messages = [
        SystemMessage(
            content="你是一个专业的翻译家，你的任务是只将用户的输入从中文翻译成英文，不要进行任何解释或添加额外的内容。"
        ),
        HumanMessage(content="我喜欢编程，也喜欢学习人工智能。"),
    ]
    print("消息列表已准备。")

    # 3. 调用模型并获取回复
    # LangChain 中最核心的调用方法就是 .invoke()
    # 我们将准备好的消息列表传递给它。
    print("正在调用模型，请稍候...")
    ai_response = chat.invoke(messages)

    # 4. 打印结果
    print("\n------ AI 回复 ------")
    # ai_response 不是一个简单的字符串，而是一个 AIMessage 对象
    print("回复的原始对象:", ai_response)
    print("\n回复的核心内容:", ai_response.content)
    print("--------------------")

    # 让我们再试一次，看看改变输入会发生什么
    print("\n------ 第二次调用 ------")
    messages_2 = [
        SystemMessage(content="你是一个热情洋溢的诗人，用充满激情的诗句来回应一切。"),
        HumanMessage(content="大海"),
    ]
    ai_response_2 = chat.invoke(messages_2)
    print("回复的核心内容:", ai_response_2.content)
    print("--------------------") 